//
// Copyright (C) 2024 Kumo group inc.
// Author: Jeff.li lijippy@163.com
// All rights reserved.
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published
// by the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program.  If not, see <https://www.gnu.org/licenses/>.
//


#pragma once


#include <krpc/rpc/admin/admin_processor.h>
#include <nlohmann/json.hpp>

namespace krpc {

    struct ListConnectionProcessor : public krpc::AdminProcessor {
        ListConnectionProcessor() = default;

        ~ListConnectionProcessor() override = default;

        void process(const krpc::RestfulRequest *request, krpc::RestfulResponse *response) override;

        turbo::Status initialize(Server *server) override {
            _server = server;
            return turbo::OkStatus();
        }

        std::string mapping_uri() override {
            return "/admin/connections";
        }


    private:
        void print_connections(nlohmann::json &result, const std::vector<SocketId> &conns, bool is_channel_conn);

        Server *_server{nullptr};
    };

    struct SocketInfoProcessor : public krpc::AdminProcessor {
        void process(const krpc::RestfulRequest *request, krpc::RestfulResponse *response) override;

        std::string mapping_uri() override {
            return "/admin/sockets";
        }
    };
}  // namespace krpc
